//第十三天错题

//2024年3月12日

#include <stdio.h>
#include <math.h>

//1.当x = 2014，判断程序运行的结果

int fun(unsigned int x)
{
	int n = 0;

	while (x + 1)
	{
		n++;
		//按位或(|)的运算规则：0|0 = 0；0|1 = 1； 1|1 = 1；有1为1，全0为0
		//所以该程序的作用为统计2014中0的个数，当x在运算中全部变为1时，就会溢出，使程序结束
		x = x | (x + 1);
	} 

	return n;
}

//2.空指针与未初始化指针
//对0x0这个地址取值使非法的
//空指针可以确保不指向任何对象或函数，而未初始化的指针可以执行任何地方
//空指针与任何对象或函数的指针值都不相等
//malloc在分配函数失败时返回NULL

//3.
//若想取出a[1]的地址，不可通过&a[0]++,a[0]会先与++结合作为一个表达式，而不可以对表达式取地址
int a[8] = { 0 };
//正确表示：
//a + 1；
//& a[0] + 1;
//&a[1];

//4.对基本类型相同的两个指针变量可以进行的运算
//-   两个类型相同的指针变量相减可以求出两者之间的元素个数
//=   两个类型相同的指针变量可以进行赋值操作
//==  两个类型相同的指针变量可以进行判断是否相等

//5.统计每个月兔子的个数
//实际上该问题就是斐波那契数

//法一：利用递归
int Rabbit_nums(int n)
{
    if (n == 1 || n == 2)
    {
        return 1;
    }
    else
    {
        return Rabbit_nums(n - 1) + Rabbit_nums(n - 2);
    }
}

int main()
{
    int n = 0;
    scanf("%d", &n);
    int ret = Rabbit_nums(n);
    printf("%d\n", ret);
    return 0;
}

//法二：利用迭代
int func(int n)
{
    int a = 1;
    int b = 1;
    int tmp = 0;

    if (n == 1 || n == 2)
    {
        return 1;
    }
    else
    {
        while (n-- > 2)
        {
            tmp = a + b;//将前两项之和储存起来
            a = b;//将第二项的值赋给原来的第一项
            b = tmp;//将前两项之和赋给原来的第二项
        }
        return tmp;
    }
}

int main()
{
    int n = 0;
    scanf("%d", &n);

    int ret = func(n);
    printf("%d\n", ret);

    return 0;
}

//6.数列的和

//法一：迭代法
int main()
{
    double n = 0.0;
    int m = 0;

    while (~scanf("%lf %d", &n, &m))
    {
        double sum = 0.0;

        while (m-- > 0)
        {
            sum += n;
            n = sqrt(n);//sqrt函数是用来求一个非负实数的平方根
        }

        printf("%.2lf\n", sum);
    }
    return 0;
}

//法二：递归法
double Sequence_sum(double n, int m)
{
    if (m == 1)
    {
        return n;
    }
    else
    {
        return Sequence_sum(pow(n, 0.5), m - 1) + n;
    }
}

int main()
{
    double n = 0.0;
    int m = 0;
    while (~scanf("%lf %d", &n, &m))
    {
        double ret = Sequence_sum(n, m);
        printf("%.2lf\n", ret);
    }
    return 0;
}